回頭看看,看,怎麼Route的內容變得這麼長阿!仔細一看,還做了路由以外的事情,像是修改變數內容等等。是不是該把Hangle Function獨立出來?有什麼辦法?Laravel的控制器(Controller)可以幫助。
我們可以透過Artisan來快速新增一個標準的控制器(Controller):
artisan make:controller Blog/ExamplePostController
在app/Http/Controllers/Blog
資料夾下會多一個ExamplePostController.php
的檔案,內容大致如下:
<?php
namespace App\Http\Controllers\Blog;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ExamplePostController extends Controller
{
//
}
Blog
這個新建立的資料夾,實際對應於昨日group
路由當中的'namespace' => 'Blog'
參數。並且在上面生成的程式中use App\Http\Controllers\Controller;
,也是因為這個新建立的模組是在App\Http\Controllers\Blog
底下的命名空間,因此要引入使用App\Http\Controllers\Controller
。關於PHP的模組系統,就不多做解釋了,只是相關的Blog
字串如不想使用,要做相對應的調整。
之後會改用資源控制器。這邊單純要做個對照,之後可以刪除不使用。
在新建立的Controller類別中,提供show
的方法來處理請求:
class ExamplePostController extends Controller
{
function show($post_id){
$title = "Example Title";
$content = "Example Content";
$title = '日的及度加機子魚年';
$content = '# Nisi virgine......';
{
$Parsedown = new Parsedown();
$content = $Parsedown->text($content);
}
return view('blog.post', [
"title" => $title,
'content' => $content,
]);
}
}
喔!對了,用到的Parsedown
,記得用use \Parsedown;
引入使用。那麼現在路由乾淨多了:
Route::group(['prefix' => 'blog',
'as' => 'blog/',
'namespace' => 'Blog', ],
function(){
Route::get('/post/{post_id}', "ExamplePostController@show");
});
把原本處理請求的函式,修改為"ExamplePostController@show"
字串。意思是使用ExamplePostController
的show
方法。同樣的,如果沒有加上namespace參數
,會需要改用"Blog\ExamplePostController@show"
。
之後會來把文章存入資料庫,在從資料庫取用。喔對!還會用到資源控制器(Resource Controller)。明天見~